
    /*
     * In a manner of speaking, you can flip ObjectKits override protection behaviour
     * from liberal (override protection off) to conservative (override protection 
     * on) by using setPreventOverride to set the value that will be applied to 
     * #implement.preventOverride after each use of #implement or #implementStatic. 
     *
     * If you turn override protection off via ObjectKit.setPreventOverride(false), 
     * then you have to explicitly turn it on again via 
     * Constructor.implement.preventOverride=true before calling #implement or 
     * #implementStatic to get override protection.
     * 
     * Conversely, if you turn override protection on via 
     * ObjectKit.setPreventOverride(true), then you have to explicitly
     * turn it off via Constructor.implement.preventOverride= false before calling 
     * #implement or #implementStatic if you want to override.
     * 
     * The out of the box setting is liberal: override protection is turned OFF by 
     * default.
     */
    
    ///////////////////////////////////////////////
    
    Abstract.implement
    (
        function getValue () 
        {
            return true;
        }
    );
    
    function Abstract () {;};
    
    ///////////////////////////////////////////////
    
    // this is how we determine if override protection is on or off by default
    if (false === ObjectKit.willPreventOverride()) 
        ObjectKit.setPreventOverride(true); // turn override protection on by default
    
    ///////////////////////////////////////////////
    
    function Concrete () {;};
    Concrete.inherit(Parent).implement
    (
        // as getValue is already defined on Abstract, and override protection
        // is on, the implementation here will not override it
        function getValue () // this will NOT override
        {
            return false;
        }
    );
    
    // so we have to explicitly turn off override protection like this
    Concrete.implement.preventOverride= false;
    // before calling an implementation method
    Concrete.implement
    (
        function getValue () // this will override
        {
            return false;
        }
    );
    
    // after invoking #implement or #implementStatic, override protection is
    // reset to the default value provided to ObjectKit.setPreventOverride- in 
    // this case, override protection is on by default, so the value will
    // be set to true
    
    alert(true === Concrete.implement.preventOverride);  // true!
    
    ///////////////////////////////////////////////
    
    // now turn override protection off by default...
    ObjectKit.setPreventOverride(false);
    
    // ... as override protection is now off by default
    Concrete.implement
    (
        function getValue () // ...this will override
        {
            return 0;
        }
    );
    
    
    // as override protection is now off by default, we have to explictly turn 
    // it on if we want to use it
    Concrete.implement.preventOverride= true;
    Concrete.implement
    (
        function getValue () // this will NOT override
        {
            return 1;
        }
    );
    
    // and after invoking #implement, its turned off again by default
    alert(false === Concrete.implement.preventOverride);  // true!